var SUCCESS_CODE = 100;

window.fish = {

        /*弹框--提醒--s*/
        toptip: toptip,
        loading: loading,
        notify: notify,
        smallModal: smallModal,
        inputModal: inputModal,
        /*弹框--提醒--e*/

        /*网络请求--s*/
        ajax:ajax,
        /*网络请求--e*/

        /*图片上传--s*/
        initImageUpload: initImageUpload,
        formDataFileUpload:formDataFileUpload,
        /*图片上传--e*/

        //日期选择
        startEndDate: startEndDate,
        //验证码倒计时
        identifyCode: identifyCode,
        //获取url的参数
        getQueryString: getQueryString,

        /*验证--s*/
        checkIdcard: checkIdcard,
        checkPhone: checkPhone,
        checkIsInteger: checkIsInteger,
        checkMoney: checkMoney,
        checkIsPercentage: checkIsPercentage,
        checkMaxInterger: checkMaxInterger,
        Validate: Validate,
        /*验证--e*/

        //数组根据某一id去重
        uniqueArray:uniqueArray,

        //下拉刷新
        infinite:infinite,
        //一维数组转化为多个二维数组
        toManyArr:toManyArr,

        //平台判断
        is_weixin:is_weixin,

        //表单模拟post提交
        postcall:postcall,
    };
    /**
     * @rely jquery.weui
     * 顶部提醒
     */
    function toptip(msg,type,duration) {
      if(!type) { type = 'error' }
      $.toptip(msg, type);
      if(!duration) { duration = 2000 };
      var timer = setTimeout(function () {
        $('.weui-toptips').remove();
        clearTimeout(timer);
      }, duration);
    }
    /**
     * purpose：fish.loading(type)为界面添加遮罩层，Loading动画
     * notice:  type只有"addLoading"和"removeLoading"可选 依赖loaders.css
     * @params：type  String  Required "addLoading" 添加Loading动画
     * @params：type  String  Required "removeLoading" 移除Loading动画
     */
    function loading(type) {
      var temp =
          '<main id="loading">'+
            '<div class="loading">'+
              '<div class="loader-inner ball-spin-fade-loader">'+
                '<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>'+
              '</div>'+
            '</div>'+
          '</main>';
          if(type == "addLoading") {
            $(document.body).prepend(temp);
            $(document.body).css({'overflow':'hidden'});
          }
          if(type == "removeLoading") {
            if($('#loading')) {
              $(document.body).find('#loading').remove();
              $(document.body).removeClass('overflow');
            }
          }
    }
    /**
     * purpose：fish.notify(msg, okcb)为界面添加Alert通知替代原生的alert
     * @params：msg Required String notify弹出框的内容
     * @params：okcb Func 点击notify弹出框后调用的回调函数
     */
    function notify(msg, okcb) {
        $('.notify').remove();
        if (!msg) {
            alert('调用notify需要传递参数，第一个是必传的内容，第二个是可选的点击知道了的回调函数');
            return false;
        }
        var html =
            '<div class="modal notify">' +
            '<div class="modalContent">' +
            '<span class="verticalMiddle">' +
            '<div>' + msg + '</div>' +
            '<div style="margin-top:20px">' +
            '<div id="notifyConfirm" class="btn blue smallBtn">知道了</div>' +
            '</div>' +
            '</span>' +
            '</div>' +
            '</div>';
        $("body").prepend(html);
        $('.notify').show();
        $('#notifyConfirm').on('click', function() {
            $('.notify').hide();
            if (okcb) {
                okcb();
            }
        })
    }
    /**
     * purpose：fish.smallModal(msg, okcb, cancelcb)为界面添加确认通知替代原生的confirm
     * @params：msg Required String smallModal弹出框的内容
     * @params：okcb Func 点击smallModal弹出框确认按钮后调用的回调函数
     * @params：cancelcb Func 点击smallModal弹出框取消按钮后调用的回调函数
     */
    function smallModal(msg, okcb, cancelcb) {
        $('.smallModal').remove();
        if (!msg) {
            alert('调用smallModal需要传递参数，第一个是必传的内容，第二个是可选的点击确定的回调函数');
            return false;
        }
        var html =
            '<div class="modal smallModal">' +
            '<div class="modalContent">' +
            '<span class="verticalMiddle">' +
            '<div>' + msg + '</div>' +
            '<div style="margin-top:20px">' +
            '<div id="smallModalConfirm" class="btn blue smallBtn">确认</div>' +
            '<div id="smallModalCancel" class="btn yellow smallBtn">取消</div>' +
            '</div>' +
            '</span>' +
            '</div>' +
            '</div>';
        $("body").prepend(html);
        $('.smallModal').show();
        $('#smallModalConfirm').on('click', function() {
            if (okcb) {
                $('.smallModal').hide();
                okcb();
            }
            $('.smallModal').hide();
        })
        $('#smallModalCancel').on('click', function() {
            if (cancelcb) {
                $('.smallModal').hide();
                cancelcb();
            }
            $('.smallModal').hide();
        })
    }
    /**
     * purpose：fish.inputModal(msg, nullmsg, okcb, cancelcb)为界面添加带输入框的确认小模态框
     * @params：msg String Required inputModal弹出框内的input框的placeholder属性
     * @params：nullmsg String Required 点击inputModal确认按钮后，输入框内容为空，显示给用户的消息
     * @params：okcb Func 点击inputModal弹出框确认按钮后调用的回调函数
     * @params：cancelcb Func 点击inputModal弹出框取消按钮后调用的回调函数
     */
    function inputModal(msg, nullmsg, okcb, cancelcb) {
        $('.inputModal').remove();
        if (!nullmsg) {
            nullmsg = "文本框内容不能为空~";
        }
        // if(!msg) {
        //   alert('调用inputModal需要传递参数，第一个是必传的内容，第二个是可选的点击确定的回调函数');
        //   return false;
        // }
        var html =
            '<div class="modal inputModal">' +
            '<div class="modalContent">' +
            '<span class="verticalMiddle">' +
            '<textarea id="reason" name="name" rows="8" style="width:250px;margin-top:20px;">' + msg + '</textarea>' +
            '<div style="margin-top:-30px">' +
            '<div id="inputModalconfirm" class="btn blue smallBtn">确定</div>' +
            '<div id="inputModalCancel" class="btn yellow smallBtn">取消</div>' +
            '</div>' +
            '</span>' +
            '</div>' +
            '</div>';
        $("body").prepend(html);
        $('.inputModal').show();
        $('#inputModalconfirm').on('click', function() {
            var txt = $('#reason').val();
            if (txt == "") {
                $('.inputModal').hide();
                fish.notify(nullmsg, function() {
                    $('.inputModal').show()
                });
                return false;
            }
            if (okcb) {
                $('.inputModal').hide();
                okcb(txt);
            }
            $('.inputModal').hide();
        })
        $('#inputModalCancel').on('click', function() {
            var txt = $('#reason').val();
            if (cancelcb) {
                $('.inputModal').hide();
                cancelcb(txt);
            }
            $('.inputModal').hide();
        })
    }
    /**
     * 初始化上传图片
     * 依赖fileupload插件
     * option: {
     *     imageId: 图片ID
     *     addFunc(e, data): 增加图片后触发该方法
     *     successFunc(result): 上传成功后触发该方法
     * }
     */
    function initImageUpload(option) {
        $(option.imageId).fileupload({
            autoUpload: true,
            url: "/admin/upload/image",
            dataType: 'json',
            acceptFileTypes:/(\.|\/)(gif|jpe?g|png)$/i,
            add: option.addFunc,
            done: function (e, data) {
                var result = data.result;
                if(CODE_SUCCESS != result.code){
                    fish.notify(result.message);
                    return;
                }
                if(option.successFunc){
                    option.successFunc(result);
                }
            },
            progressall: function (e, data) {
                //进度条设置
            },
            processfail: function (e, data) {
                fish.notify("上传的图片格式错误");
            }
        });
    }
    /**
     * 为输入框添加开始和结束时间
     * 依赖foundation.datepicker.js
     * option: {
     *     startSelector: 开始时间的输入框的selector
     *     endSelector: 结束时间的输入框的selector
     * }
     */
    function startEndDate(startSelector, endSelector) {
        var nowTemp = new Date();
        var now = new Date(nowTemp.getFullYear(), nowTemp.getMonth(), nowTemp.getDate(), 0, 0, 0, 0);
        // var startDate = "";
        // var endDate = "";
        var checkin = $(startSelector).fdatepicker({
            format: 'yyyy-mm-dd',
            // onRender: function (date) {
            //   return date.valueOf() < now.valueOf() ? 'disabled' : '';
            // }
        }).on('changeDate', function(ev) {
            console.log($(startSelector).val());
            // startDate = $(startSelector).val()
            if (ev.date.valueOf() > checkout.date.valueOf()) {
                var newDate = new Date(ev.date);
                newDate.setDate(newDate.getDate());
                checkout.update(newDate);
            }
            checkin.hide();
            // $('#endDate')[0].focus();
        }).data('datepicker');
        var checkout = $(endSelector).fdatepicker({
            format: 'yyyy-mm-dd',
            onRender: function(date) {
                return date.valueOf() < checkin.date.valueOf() ? 'disabled' : '';
            }
        }).on('changeDate', function(ev) {
            console.log($(endSelector).val());
            // startDate = $(endSelector).val()
            checkout.hide();
        }).data('datepicker');
    }
    // 验证码
    /*val 是jquery对象*/
    /*cb 是点击获取验证码的时候执行的函数，可以在这里面请求数据*/
    /*number是秒数*/
    function identifyCode(val,cb,number) {
        // 判断是否能够点击
        if(val.hasClass('gray')) {
          return false;
        }
        // 执行函数
        if(cb) {
          if(!cb()) {
            return false;
          }
        }
        var countNum = number ? number : 60 ;
        var countdown = countNum;
        var interval = null;
        settime();
        function settime() {
            if (countdown == 0) {
                val.html("获取验证码");
                countdown = countNum;
                val.removeClass('gray').addClass('green');
                return false;
            } else {
                val.html("重新发送" + countdown + "s");
                val.removeClass('green').addClass('gray');
                countdown--;
            }
            interval = setTimeout(function() {
                settime(val);
            }, 1000)
        };
    }
    /*
     * msg String文本框的placeholder属性
     * nullmsg String点击确定文本空白的后的提示
     */

    function checkIdcard(card) {
        // 身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X
        var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
        if (reg.test(card) === false) {
            fish.notify("身份证输入不合法");
            return false;
        }
        return true;
    }

    function checkPhone(mobile) {
        var reg = /^(13[0-9]|14[0-9]|15[0-9]|18[0-9])\d{8}$/i;
        if (!reg.test(mobile)) {
            fish.notify("请输入正确的手机号！");
            return false;
        }
        return true;
    }

    function checkIsInteger(obj) {
        if (obj.value == "") {
            return false;
        }
        if (obj.value > 0 && obj.value % 1 === 0) {

        } else {
            fish.notify("请输入正整数！");
            obj.value = "";
        }
    }

    function checkMaxInterger(obj, maxNum) {
        if (obj.value == "") {
            return false;
        }
        if (obj.value > 0 && obj.value % 1 === 0 && obj.value <= maxNum) {

        } else {
            fish.notify("请输入大于0小于" + maxNum + "的正整数");
            obj.value = "";
        }
    }

    function checkIsPercentage(obj) {
        if (obj.value == "") {
            return false;
        }
        var reg = /^(-)?(([1-9]{1}\d*)|([0]{1}))(\.(\d){1,2})?$/;
        if (!reg.test(obj.value) || obj.value < 0 || obj.value > 100) {
            fish.notify("请输入正确的百分比，最多两位小数");
            obj.value = "";
        }
    }

    //验证金额
    function checkMoney(obj) {
        if (obj.value == "") {
            return false;
        }
        var reg = /^(-)?(([1-9]{1}\d*)|([0]{1}))(\.(\d){1,2})?$/;
        if (!reg.test(obj.value) || obj.value < 0) {
            fish.notify("请输入正确的金额，最多两位小数");
            obj.value = "";
        }
        if(obj.value > 999999999.99) {
          fish.notify("请输入正确的金额，整数位最多只能输入9位数字");
          obj.value = "";
        }
    }

    /**
     * Validate
     */

     function Validate(options) {
       this.idArr = options.idArr;
       this.labelArr = options.labelArr;
       this.idcard = options.idcard || null;
       this.mobile = options.mobile || null;
     }
     Validate.prototype.checkAll = function () {
       if(!this.checkNotNull()) {
         return false
       }else {
         return true
       }
       if(this.idcard) {
         if(!this.checkIdCard()) return false;
         return true;
       }
       if(this.mobile) {
         if(!this.checkPhone()) return false;
         return true
       }
     }
     Validate.prototype.checkNotNull = function () {
       for (var i = 0; i < this.idArr.length; i++) {
         if($('#'+this.idArr[i]).val() == '') {
           fish.toptip(this.labelArr[i]);
           return false
         }
       }
       console.log('true');
       return true;
     }
     Validate.prototype.checkPhone = function () {
       if(fish.checkPhone(this.mobile)) {
         return true
       }else {
         return false
       }
     }
     Validate.prototype.checkIdCard = function () {
       if(fish.checkIdcard(this.idcard)) {
         return true
       }else {
         return false
       }
     }

    /**
     * 获取url参数
     */
    function getQueryString(link) {
      var obj = {};
      // console.log(link.substr(link.indexOf("?")));
      var url = link.substr(link.indexOf("?"));
      // console.log(url);
      if (url.indexOf("?") != -1) {
          var str = url.substr(1);
          var strs = str.split("&");
          for (var i = 0; i < strs.length; i++) {
              obj[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
          }
          return obj;
      }
    };

    /**
     * 网络请求
     */
    function ajax(option,method) {
      var url = option.url;
      var params = option.params || {};
      var callback = option.callback;
      var contentType = option.contentType || "application/x-www-form-urlencoded";
      // fish.loading('addLoading');
      reqwest({
        url: url,
        method: 'POST',
        data: params,
        contentType: contentType,
        type:'json',
        withCredentials: false,
        success: function (data) {
          // fish.loading('removeLoading');
          if(data.code == SUCCESS_CODE) {
            callback(data);
          }else if(data.code == ERROR_NO_LOGIN || !data || !data.code) {
            //window.location.href="/dist/login";
            fish.notify('用户未登录')
          }else{
            fish.notify(data.message);
          }
        },
        error: function (err) {
          // fish.loading('removeLoading');
          console.log(err);
        }
      })
    }

    /**
     * 下拉分页加载
     * @rely jquery.weui.js
     * @param options {object} {url*:网络请求的url,params:请求的参数,callback:请求后作出的响应回调,selector：滚动的父容器选择器}
     * @param reset {boolean} 是否重置分页数infiniteIndex
     */
     var infiniteIndex = 1;
     var infiniteLoading = false;  //状态标记
     function infinite(options,reset) {
       var url = options.url;
       var params = options.params || {};
       var callback = options.callback || null;
       var selector = options.selector || document.body;
       var loadingHtml =
       '<div class="weui-loadmore">'+
         '<i class="weui-loading"></i>'+
         '<span class="weui-loadmore__tips">正在加载</span>'+
       '</div>';
       $(document.body).append(loadingHtml);
       $('.weui-loadmore').hide();
       //初始化
       if(reset) { infiniteIndex = 1 }
       params.pageNo = infiniteIndex;
       fish.ajax({
         url:url,
         params:params,
         callback:function (result) {
           infiniteIndex += 1;
           if(callback){
             callback(result)
           }
         }
       });
       //下拉加载
       $(selector).infinite(50).on("infinite", function() {
         if(infiniteLoading) return;
         infiniteLoading = true;
         $('.weui-loadmore').show();
         params.pageNo = infiniteIndex;
         fish.ajax({
           url:url,
           params:params,
           callback:function (result) {
             infiniteLoading = false;
             $('.weui-loadmore').hide();
             if(result.rows.length > 0) {
               infiniteIndex += 1;
               if(callback) {
                 callback(result);
               }
             }
           }
         });
       });
     }

    /**
     * 数组根据某一id去重
     * @notice 数组内部为对象格式[{},{},...]
     * @param array {array}
     * @param id {string}
     * @notice 数组内部为对象格式
     */
     function uniqueArray(array,id) {
       var res = {};
       var finalArr = [];
       for(var i = 0; i < array.length; i++){
          res[array[i][id]] = array[i];
       }
       for (var i in res) {
         if (res.hasOwnProperty(i)) {
           finalArr.push(res[i])
         }
       }
      //  console.log(finalArr);
       res = null;
       return finalArr;
     }

     /**
      * 图片上传   三个都必传 不依赖第三方插件
      * 缺点是input外面得包一层form
      */
      function formDataFileUpload(options) {
        var url = options.url;//请求的url
        var dom = options.dom;//form DOM节点
        var callback = options.callback;//成功的回调
        var form = new FormData(dom);
        $.ajax({
            url:url,
            type:"post",
            data:form,
            processData:false,
            contentType:false,
            success:function(data){
                var res = JSON.parse(data);
                if(res.code !== 100) {
                  fish.notify(res.message);
                  return false;
                }
                callback(res);
            },
            error:function(e){
                fish.notify("错误！！");
            }
        });
      }

      /**
       * 一维数组转化为多个二维数组
       */
      function toManyArr(array,number) {
        var fixedNum = number ? number : 4;
        var tempArr = [];
        var count = Math.floor((array.length)/fixedNum);//取整

        var residue = (array.length)%fixedNum;//取余

        for(var i=0;i<count;i++) {
      	  tempArr[i] = [];
      	  for(var j=0;j<fixedNum;j++) {
      		  var k = i*fixedNum+j;
      		  tempArr[i][j] = array[k];
      	  }
        };
        if(residue > 0) {
      	  var temp2Arr = [];
      	  var tempNumber = count*fixedNum;
      	  for(var j=0;j<residue;j++) {
      		  var k = tempNumber + j;
      		  temp2Arr.push(array[k])
      	  }
      	  tempArr.push(temp2Arr);
        }
        return tempArr;
      };

      function is_weixin(){
      	var ua = navigator.userAgent.toLowerCase();
      	if(ua.match(/MicroMessenger/i)=="micromessenger") {
      		return true;
       	} else {
      		return false;
      	}
      }
      //表单模拟post提交
      function postcall(url, params, target){
          var tempform = document.createElement("form");
          tempform.action = url;
          tempform.method = "post";
          tempform.style.display="none"
          if(target) {
              tempform.target = target;
          }

          for (var x in params) {
              var opt = document.createElement("input");
              opt.name = x;
              opt.value = params[x];
              tempform.appendChild(opt);
          }

          var opt = document.createElement("input");
          opt.type = "submit";
          tempform.appendChild(opt);
          document.body.appendChild(tempform);
          tempform.submit();
          document.body.removeChild(tempform);
      }

      // export function getJSON(url,params,method = 'POST') {
      //   var postData = (function(obj){ // 转成post需要的字符串.
      //       var str = "";
      //       for(var prop in obj){
      //           str += prop + "=" + obj[prop] + "&"
      //       }
      //       return str.slice(0,-1);
      //   })(params);
      //   var promise = new Promise(function(resolve, reject){
      //     var client = new XMLHttpRequest();
      //     client.open(method, url);
      //     client.onreadystatechange = handler;
      //     client.responseType = "json";
      //     client.setRequestHeader("Accept", "application/json");
      //     client.setRequestHeader("Content-type","application/x-www-form-urlencoded");
      //     client.send(postData);
      //     function handler() {
      //       if (this.readyState !== 4) {
      //         return;
      //       }
      //       if (this.status === 200) {
      //         resolve(this.response);
      //       } else {
      //         reject(new Error(this.statusText));
      //       }
      //     };
      //   });
      //   return promise;
      // }
      //
      // export function postAjax(url,params) {
      //   loading('addLoading');
      //   var promise = new Promise(function(resolve, reject) {
      //     getJSON(url,params).then((data)=>{
      //       loading('removeLoading');
      //       if(data.code != SUCCESS_CODE) {
      //         fish.notify(data.message);
      //         reject(data.message);
      //         return false;
      //       }
      //       resolve(data);
      //     })
      //   });
      //   return promise;
      // }







//
